//
// Created by cube on 2020/10/22.
//

#ifndef COMPILERDOMEA1_TOOLS_H
#define COMPILERDOMEA1_TOOLS_H

#endif //COMPILERDOMEA1_TOOLS_H

//    virtual void createFrame(int8_t*& data,uint32_t& len,bool& reack){
//        if(len > sizeof(ReAck)*2 && !__reply_acks.empty()){ //acks
//            len -= sizeof(ReAcks);
//            uint32_t count = 0;
//            while (len > sizeof(uint32_t)){
//                uint32_t& id = *(uint32_t*)(data + sizeof(ReAcks) + count * sizeof(uint32_t));
//                if(!__reply_acks.pop(id))break;
//                len -= sizeof(uint32_t);
//                count++;
//            }
//            ((ReAcks*)data)->count = count;
//            data += sizeof(ReAcks) + sizeof(uint32_t) * count;
//            reack = true;
//        }else if(len >= sizeof(ReAck) && !__reply_acks.empty()){ //ack
//            len -= sizeof(ReAck);
//            __reply_acks.pop(((ReAck*)data)->id);
//            data += sizeof(ReAck);
//        }
//
//        if (len > sizeof(SendData) && !__send_buffer.empty()){       //data
//            len -= sizeof(SendData);
//            uint32_t rlen = __send_buffer.read(data + sizeof(SendData),len);
//            ((SendData*)data)->len = rlen;
//            data += sizeof(SendData) + rlen;
//            len -= rlen;
//            reack = true;
//        }
//    }
//
//    void send_from_buffer(){
//        while (__base_index < __option.__max_frame_index && canSend()) {
//            uint32_t len    = __option.__send_buf_size;
//            int8_t*  data   = new int8_t[len];
//            bool     reack  = false;
//            __init_frame_chains.work(data,len,reack);
//            if(len < __option.__send_buf_size){
//                if(reack)send(__base_index++,data,len);
//                else send(data,len);
//            }
//        }
//    }
